﻿// See https://aka.ms/new-console-template for more information
/// <summary>
/// 观察者模式的客户端代码
/// 演示了如何使用观察者模式实现气象数据的发布和订阅机制
/// </summary>
Console.WriteLine("Hello, World!");

/// <summary>
/// 创建具体主题对象（气象数据中心）
/// 这是被观察者，负责发布气象数据更新
/// </summary>
var weatherData = new WeatherData();

/// <summary>
/// 创建具体观察者对象
/// 1. 当前天气显示屏 - 显示实时温度和湿度
/// 2. 统计显示屏 - 显示天气统计信息
/// </summary>
var currentDisplay = new CurrentConditionsDisplay();
var statsDisplay = new StatisticsDisplay();

// 订阅
/// <summary>
/// 注册观察者到被观察者中
/// 观察者开始订阅被观察者的状态变化
/// </summary>
weatherData.RegisterObserver(currentDisplay);
weatherData.RegisterObserver(statsDisplay);

// 模拟气象数据更新
/// <summary>
/// 第一次模拟气象数据更新
/// 当数据更新时，所有已注册的观察者会自动收到通知
/// </summary>
weatherData.SetMeasurements(25.0f, 65.0f, 30.1f);
Console.WriteLine();

/// <summary>
/// 第二次模拟气象数据更新
/// 展示了观察者模式如何实现松耦合的状态通知机制
/// </summary>
weatherData.SetMeasurements(28.0f, 70.0f, 29.8f);